home *** CD-ROM | disk | FTP | other *** search
- Handling Interrupts using the Macro Assembler!
-
- This is the script from the Jerry Stuckle ASM Conference on Interrupts which was
- held during the regular 8PM Conference on Sunday, 3 February 1985 and refers to
- the ASM program ASYNCH.ASM in DL4. The script has been slightly edited to
- conform to the 80 character line. Thanks to Jerry and all who participated to
- make this a very well organized and informative Conference on Assembly Language.
- Jerry is constantly on the lookout for suggestions for new topics to cover in
- future Conferences. Leave Jerry a message or send him Email to his PIN,
- 72205,234!
-
- (30,Jerry S) I think this one is going to run a while! ga
- (30,Jerry S)
- Mike --> I'm ready any time, but let's let a few get here first. I do have...
- introductory text written for each section we will be covering. ga
- (30,Frank O'D.)
- Hi! Jerry > Do you intend to cover all of Async, or certain sections? ga
- (30,Jerry S)
- Mike -->OK, this is popular, from the number of DOWnloads on the files! ga
- (30,Jerry S)
- Frank ->Hi! We'll be going through all of it (if it doesn't get too long). If it
- (30,STEVE HULL) ??
- (30,Jerry S)
- John --> As long as it's quick, I think we're about ready. ga
- (30,John Stidd)
- Is there a good book that explains the file formats of OBJ and LBR?
- (30,Avi S.) about how long is the CO?
- Recognize your question Steve. Guess We'll get started. Everyone use ?? for ...
- Questions O.K.?? ga
- (30,Jerry S)
- John --> Nope. That's Microsoft's secret. ga
- (30,Craig Derouen ) ??
- (30,STEVE HULL) HOW CAN I GET THE ENTIRE LINE TO DISPLAY ?
- Avi <== CO is usually one to one and a half hours. ga
- (30,Jerry S) Steve --. If you are using an emulator (i.e. VT100),turn it off. ga
- (30,Julian Thomas ) ?? I have a simple tip for beginning ASM users - ga
- Question Craig ga
-
- (30,Jerry S)
- Julian -> This CO is for advanced users. Beginning was last week on 129. ga
- Mike --. We all ready to go? ga
- Let's hit it, Jerry. How about an Intro? ga
-
- (30,Jerry S)
- OK, all. Just a couple of notes. I will have prepared text before each
- section of code. At the end of the text, I will ask for questions. Please
- hold your questions to then, and use the '??' to indicate you have one. If
- you have a comment which is relative th *THE TOPIC AT HAND*, use '!!' to
- indicate the comment. Please, let's not get too far off the subject tonight,
- we have a lot to cover, and not much time to do int in! We will not be looking
- at specific instructions, rather we will be looking at the code. So, here
- comes the first introductory prepared text.
- Good evening all, and welcome to the next in a series of MASM conferences!
- It has been a long time since we've had one, but I hope we can get them
- going on a more regular basis.
- The documentation for tonight is the file ASYNC.ASM on the DL4 database.
- I hope everyone has DOWnloaded it, we will not have enough time to go over
- the instructions. Rather, tonight I would like to discuss the use of some
- simple macros, how to handle hardware and software interrupts, and writing
- structured code in ASM.
- Before we get started, there is a bug in the V1.0 assembler which has reared
- its ugly head (again). This bug is fixed in the V2.0 MASM, so you won't
- have the problem if you use the V2.0 assembler.
- The bug is in the LEA instruction, when referencing a FAR procedure. The
- V1.0 assembler tries to set up a OFFSET:SEGMENT address in the instruction,
- which is, of course, invalid. To correct the problem you can simply change
- INT14 PROC FAR
- to
- INT14 PROC NEAR
- Since the entry and exit points to this procedure are via interrupts, it
- won't make any difference if it is a NEAR or a FAR call. If you DOWnloaded
- the file after Jan 28, you have a corrected copy of the routine.
- I will have some prepared text (like this one) on each of several topics
- in the program. At the end of the text, I will ask for questions. Please
- limit you questions to the code at hand; we have a lot to cover tonight,
- and can't stray too far, or we won't get everything in. So, before we get
- started, are there any questions? ga
- P.S. please ignore any typos in the text. I don't type so well! ga
- Fine. Let's get started then.
- Before we get into the code itself, lets take a look at the program in general.
- There are some coding conventions I follow which make it easier for me to read
- Mike, ga and pick up John. ga
- (30,John Stidd) Would like more info on ASM release 2.0
- (30,Jerry S)
- John, that is available from IBM. You get an updated copy for $75 plus the
- cover from your old MASM V1.0 manual. Contact your nearest IBM dealer for more
- info. OK? ga
- (30,E.J. Tejera ) !!
- GA E.J. ga
- (30,E.J. Tejera )
- It is not so easy, I tried to exchange V1 and IBM Center here had NO ..
- knowledge....ga
- (30,Jerry S)
- EJ, they should by now. They need to contact their suppliers for more info, if
- they don't know. ga
- (30,E.J. Tejera ) I'll keep triyng...ga
- (30,Julian Thomas ) !!
- (30,Jerry S)
- EJ, you do have to send in form. The exchange is not available at the store. ga
- GA Julian. ga
- (30,E.J. Tejera ) OK ga
- (30,Julian Thomas )
- Jerry S just said it. Most dealers "should" have the upgrade form... ga
- (30,Jerry S) OK, any other questions? ga
- Fine. Let's get started then.
- Before we get into the code itself, lets take a look at the program in general.
- There are some coding conventions I follow which make it easier for me to read
- the output. By no means are they required, and other people have different
- ideas, but this is the way I do things, anyway, for better or worse.
- Macros should be placed (or Included) at the start of the file. Normally I
- will use the IF1/ENDIF around the macros, so they don't print in the final
- copy. I did not use them here so that you can see the output of the macros.
- The use of IF1/ENDIF around the macro definitions will not affect the code
- generation, but will prevent them from being printed.
- Labels, commands and variables I capitalize. I used to use all upper case
- letters, but that gets a bit glaring. Also, it helps set off the variable
- names in an instruction, and I find it easier to read. All lower case seems
- to get lost in the shuffle. Note that the only times case are important are
- in the Ifidn and Ifdif psuedo ops. That is, Ifidn <A>,<a> will not compare.
- Otherwise, case does not matter.
- Registers I code in upper case. Since all the registers have 2 character Id's,
- it doesn't glare, and you can spot them easily in the code.
- A base identifier (i.e. 'H' for Hexadecimal) is in lower case. This way the
- base doesn't get mixed up with the number. This is especially true when a 'D'
- can look like a '0' at a quick glance.
- You will also note I don't place labels on statements. I use the 'Label'
- psuedo op instead. I find this helpful when writing code. How many times
- have you had to add a statement after a label, but before the statement the
- label is on? This way, just insert the line of code.
- And, it goes without saying that good use of Subttl and Page psuedo ops will
- make the listing a lot easier to read, and later debugging much faster. It
- also looks better when showing it to others.
- I find these general guidelines make the final output look more professional.
- Again, these are just my ideas, what you want to do may be different. So,
- are there any questions? ga.
- Ok, lets take a look at the macros we will be using here. Note that these
- macros are all general in nature, and came from a macro library I have built
- up over the years. I have found if you have to execute similiar code more
- than one place in the program, a macro can be helpful.
- The first macro is actually a pair - Save and Restore. Save will PUSH the
- requested regs (up to 10) into the stack. Restore is used without registers,
- and will pop the regs from the stack. This works because of a not-well
- documented fact in MASM - if macros are nested, the inner macro can access the
- paramaters and local variables of the outer macro. The inner macro will not
- expand when the outer macro is called.
- The Setint macro is used to set up interrupt vectors. This macro is handy
- because you don't have to remember the DOS function to use, what registers
- need to be set, etc. The only restriction here is DS must point to the
- segment of the vector (preset by DOS for .COM programs.)
- The Incbuf is used to increment a circular buffer pointer. It is also called
- from the Putbuf (place a character in the buffer) and Getbuf (get a character
- from the buffer) routines
- Bufinit and Flush are used to initialize the buffer and clear the buffer,
- respectively. All the buffer macros are dependant on the buffer being defined
- with the BUFFER structure, shown next. This structure defines the size of
- the circular buffer, and makes room for the data start and end pointers in the
- buffer.
- This is a quick overview of the macros. Are there any questions about these
- macros before we go on?
- (30,John Stidd) ??
- GA John. ga
- (30,Roy T.) ca << 24
- (30,John Stidd)
- Are the parameters in a Record available even if the Record is never invoked...
- Initial is nev+sed in the OpCode field in this program. ga
- correction "never used"(in Op...)ga
- (30,Jerry S)
- John, yes they are. This will define the fields. In this case, I am using the
- Initial record to define some fields. Equates could also be used, but I wnated
- to show a record. The advantage to using the Record name in an opcode is you
- can define the record to be any number of bits long; the final length of the
- variable will be the minimum number of bytes required to hold those bits. ga
- Any other questions? ga
-
- (30,Jerry S)
- We're moving right along! The next few statements are EQUates for some of
- the bits we will be using later. An advantage of using EQUates is, if we
- need to change something later, we only need to change it one place (in the
- EQU), and reassemble the program.
- Next we come to the segment header, and initialize our segment to start at
- 100h. You will notice the first statement is a JMP to Start. This is handy
- in a .COM program, as you can define the data right at the beginning, where
- the attributes are known the first pass of the assembler. This can save a
- lot of problems later with the feared 'Phase error between passes' message.
- The routine we are JMPing to is at the end. Let's go to label Start.
- Down here, we initialize the buffer pointers (Bufinit macro), set up the
- interrupt handlers for INT 0C and INT 14, and execute DOS interrupt 27h. This
- is the old DOS 1.x terminate but stay resident interrupt. I used INT 27
- instead of the newer version in DOS 2.x for compatability reasons - some of the
- people here may not be using DOS 2.x yet.
- Note that before we terminate the program, we load the address of RESEND into
- DX. This is before the routine we are currently executing. This is possible
- in this case, because this code is executed once (this time), and never again.
- This is also why we place this code at the end of the routine. While we only
- save a few bytes here, in programs with larger initialization routines, the
- savings may be considerable.
- Now, are there any questions? ga
- We're doing great, here! Lets move on then. We will skip over the data areas
- right now, and mention them as we go along. Let's go to the INT 14 procedure.
- From now on, the updates will be shorter, and we will take the code one
- procedure at a time.
- The first proc is INT 14. Note that this is a large procedure, containing
- several other procedures. The first thing we do coming in is enable interrupts
- again, save the regs and verify paramaters. If any parm is bad, we return with
- 0FFh in AL.
- If the parms are ok, we move the function code to BX, multiply by 2, and call
- the correct routine to handle the request, via a table (Functbl). The
- advantage of using a table here is, you don't have to check for each possible
- function type, and (as in this case), we defined FUNCNT (function count) to be
- the size of the table/2 (2 bytes per entry). To add a function, copy in your
- new procedure, and add a pointer to Functbl and you're ready to go. Also, to
- change the pointer to a routine, just change the Functbl pointer.
- When we return, we just restore the regs and execute an IRET. The interrupt
- return is required as we entered the routine via an interrupt.
- Any questions about this routine? ga
- (30,Zhahai) ??
- GA Zhahai. ga
- (30,Zhahai) When is the value of an EQU evaluated? ga
- (30,Jerry S)
- Hi, Zhahai! The EQU is evaluated whenever the assembler can set it up -
- that is, if everything is known at pass 1 (like here), it will be set up
- on pass 1. If something is not known, it may be set up on pass 2. The real
- value of an equate is to be able to use a meaningful name in an instruction,
- instead of the value. That is, the statement:
- Or AH,Timeout
- is a lot more meaningful then the instruction:
- Or AH,80h
- If Timeout is Equated to 80h, the two statements are identical. Just the first
- one means something, the second may not. OK? ga
- (30,Julian Thomas ) !! It sin't particularly useful dynamically used! ga
- (30,Zhahai) A recent thread gave an example wherein an EQU with $...
- did not evaulate the $ where it was defined (as here), but when...
- later used. Worried me. I have only used constant EQUs. ga
- (30,Jerry S)
- Zhahai, If you look at the output of an EQU, it will have a value associated
- with it, although it takes up no memory. In your case, the statement:
- Current_Location Equ $
- should set the constant Current_Location to the value in the location counter
- at this point. If used later, it will point back to where Current_Location
- was set up. Resend is a good example of that. ga
- (30,John Stidd) !! Symbol Equ $ doesn't work. Needs Offset $. ga
- (30,Zhahai) OK, I will ask some more offline. ga
- (30,Jerry S) No problem...
- All --. When using the '!!', please wait to be recognized.
- GA John. ga
- John, it sure seems to work every place I use it. Note that the location
- counter is NOT a constant, where 'Offset $' is - that is, there is a difference,
- (30,John Stidd) ??
- and some of the things you do with one cannot be done with another. I would
- prefer not to get too deep into the difference, but when working with offsets,
- you should be able to use the 'Equ $'. ga
- (30,GREG NOLL ) NANOO<NANOO<
- Is that a question, Greg? ga
- (30,Jerry S) Mike --. John had a question. ga
- (30,John Stidd) ??
- (30,GREG NOLL ) NO JUST A GREETING
- I thought you answered John's. If not, GA John. ga
- (30,John Stidd)
- I can't remember specifics, but once tore my hair out with a problem...
- that I finally fixed with Offset $. Is this another 1.00 vs. 2.00 dif? ga
- (30,Jerry S)
- John, not really. However, as I said, there are differences. I.E. if you want
- to find the length of a routine, you may need to use
- Routine_Length Equ Offset $ - Offset Routine_Start
- Using:
- Routine_Length Equ $ - Offset Routine_Start
- is different, and may cause problems. ga
- (30,John Stidd) ??
- GA John. ga
- (30,John Stidd)
- Is there anything published that explains this nitty stuff really well? ga
- (30,Jerry S)
- John, the best I can recommend is to hit your nearest large book store. This
- area is not well documented any place I have found, and most of what I have
- learned was by trial and error. If you get strange results, look at what the
- EQU inserted for a value (on the left of the listing). This is the value which
- will be inserted when the constant is later used. Also, you should be able to
- see the value in the statement which uses the constant. ga
- (30,Jerry S) Any other questions? ga
- Great! Let's continue then.
- The next procedure, Copen, is used to initialize the port. It sets the speed,
- parity, number of stop bits, and number of data bits. The only thing here
- which is a little unusual is the DIVISOR table. We get the speed from the
- passed request, and convert (via MASK and SHR) to an offset into the DIVISOR
- table. The value pointed to is picked up and placed into the divisor latch on
- the Async board, therefore setting thebaud rate.
- Next we set the Line control register (by the way, we are taking a shortcut and
- also turning off the DLAB bit, so that we are not using the divisor latch
- registers any more.
- Noext we have to save things for a minute and enable the system for interrupts
- from the async board. This MUST be done before enabling the interrupts at the
- async board. Otherwise, a pending interrupt from the async board may 'hang'
- all future interrupts. Note that the STI instruction does not disable the
- hardware interrupt, just the software processing of the interrupt.
- After we enable the system for interrupts, we enable the async card. Any time
- after this, our interrupt routine may get control. We disable interrupts while
- working with the buffers, and flush both transmit and receive buffers. We get
- the current status, set the line and modem status bytes, call the status
- routine (Cstat), and return to caller.
- This is about the most complex routine in the INT 14 procedure, and I'm sure
- we have some questions. Ga.
- (30,DaveA) !!
- GA DaveA. ga
- (30,DaveA) Jerry, A typo above. CLI disables interrupts, not STI. ga
- (30,Jerry S)
- You're correct, Dave! I saw that this time, but not the other times I
- proofed it! The code is correct, we have a CLI before and a STI after. ga
- (30,DaveA)
- Jerry, just keeping you on your toes (grin). BTW, Wes said to say hi. ga
- (30,Jerry S) Thanks, Dave. Any other comments/questions? ga
-
- (30,Zhahai) ??
- GA Zhahai. ga
- (30,Zhahai) Why the "nop ;allow dummy machine cycle" ?
- (30,Jerry S)
- Zhahai, That is to allow any interrupts pending from the async port to be
- processed. We have to take a machine cycle for the hardware to detect/set up
- the interrupts. If we have the CLI immediately after inabling interrupts,
- (30,STEVE HULL) ??
- (30,Jerry S)
- anything pending may or may not be handled right now. This way, anything
- (30,DaveA) !!
- (30,Jerry S)
- pending will be handled immediately by the INT0C routine. ga
- GA Steve. ga
- (30,STEVE HULL) Why do you raise RTS during initialization?
- (30,Jerry S)
- Steve, in order to send data to the port, we want RTS to come up. The
- modem should respond with CTS, when it can accept data. Some modems do not
- care, others may require RTS to be up before data can be sent. Note that
- this routine assumes full duplex; if you were to write a routine for a
- half-duplex system, you would not want to bring up RTS immediately. OK? ga
- (STEVE HULL) thanks
- GA DaveA. ga
- (30,DaveA)
- Jerry, On a Z80, the EI execution is actually delayed for one instruction ...
- ... time in order to allow a RET to occur, and avoid indefinite nesting. ...
- ... Is this also true for STI on the 8086? I always use two NOP's just ...
- ....to be sure. ga
- (30,Jerry S)
- Dave, as far as I can tell, the 8088 also can delay the interrupt. One Nop
- should be sufficient, as the interrupt should occur no later than the end of
- the next instruction. I this case, it should be handled no later than between
- the NOP and the CLI. Although 2 NOP's are nice, especially since they are
- only 1-byte instructions, I have not run into problems using only 1. ga
- (30,KevinR) !!
- GA KevinR. ga
- (30,KevinR)
- One should note the havoc back to back I/O play on an 80286 chip ...
- such as in ;Get the status : Again to clear ga.
- (30,Jerry S)
- Kevin, that should not cause a problem here. The first status request will
- pick up any change (delta lines) from the port. The delta lines will be
- reset by the first request, and the second will only get the lines which
- were changed after the first request. Otherwise, we might get old status
- (30,DaveA) !!
- from a line which changed before the open request was started.
- This is not really an I/O request, just a read from a port. ga
- (30,KevinR) !!
- GA DaveA. ga
- (30,DaveA)
- Likewise, don't issue an STI on a 286 for several instruction times after ...
- ... inhibiting a channel on an 8259. The pipelining on a 286 causes many ...
- ... new problems. ga
- GA KevinR. ga
- (30,Jerry S)
- Dave, that could be true. I (unfortunately) don't have an 80286. ga
- (30,KevinR) Jerry, Have you tried running ASYNC.ASM on an IBM AT ?? .....
- (30,Jerry S)
- Kevin, no I haven't, but then I didn't write it for an AT. As I said before,
- (30,KevinR) The second In opcode is never even seen by the async board ga.
- (30,Jerry S)
- this is an example, and not really a ready-to-run routine. It may require
- modification for your particular system. ga
- Any other questions? ga
- (30,John Stidd) |??
- GA John. ga
- (30,John Stidd)
- In my listing there is a Cli at the beginning, another Cli at end of page...
- (30,DaveA) !!
- (30,John Stidd) and no intervening Sti. Is this right? ga
- (30,Jerry S)
- True, John. The first CLI should have been removed, it was from an early
- version. Chalk another one up for Murphy! ga
- DaveA. ga
- (30,DaveA)
- General advice for anyone coding I/O on a 286: Include a jump after every ...
- ... IN or OUT instruction. this flushes the queue, and provides enough ...
- ... delay for both the 286 pipelining difficulties, and most external ...
- ... hardware glitches (like on the AT). ga
- (30,Jerry S)
- Dave, good advice, but can we stay with the current routine (on the 8088)? ga
- (30,DaveA) Yup, sorry. No more on 286, I promise. ga
- (30,Jerry S) Thanks. Any other questions? ga
- Well, if you're still with us, we're past the hardest part in the INT14
- procedure!
- The next procedure is the Csend routine. This is fairly simple. First
- we place a byte from AL into the buffer. Note that, if the buffer is full,
- the Putbuf macro sets the carry bit on return. If not, the carry bit is
- cleared. If the buffer is full, we get the status (from Cstat again), make
- sure the timeout bit is set (indicating buffer full) and return to the caller.
- If the buffer is not full, we check to see if transmit holding register
- interrupt is already enabled. If so, we return. If not, the interrupt is
- enabled, allowing the INT0C routine to pick up the new data and transmit it.
- As you will see later, the transmit holding register empty interrupt is
- disabled when there is no more data in the buffer to transmit. Restoring
- the system interrupt pending is not necessary at this point, and has been
- deleted from a later version of the program. It actually should have no effect
- on the program operation, although it is possible that a *very* critical
- timing condition exists with this code installed.
- Any questions?
- Well, let's continue then.
- The next routine is even easier. The Crcve procedure takes a byte from the
- receive buffer and returns it in AL. If the buffer is empty, an 0FFh is
- returned instead. Again, we are using the carry flag to inticate buffer empty.
- If the buffer is not empty, we return the status (AHSTAT), with the non-error
- bits turned off. This is for compatability with the existing INT 14 routine
- in BIOS.
- Any questions on the Crcve procedure? ga
- Well, we're getting down to the end of the INT 14 procedure!
- The next two procedures are going to be talked about together. They are the
- CSTAT and AHSTAT procedures.
- Cstat first calls AHstat to set AH with the current status, and then moves
- the modem status into AL. Ths modem status byte will be set in the INT 0C
- routine.
- AHstat is also called by several internal routines. It first gets the line
- status into AH. It then turns off some bits which relate to the buffer, and
- gets the buffer status.
- The Transmit buffer is first. We check two things: Is the transmit buffer
- not full, and is the buffer not empty; setting the respective bits as
- necessary. We then check if the receive buffer is empty, and set the receive
- data ready bit if not. In either case, we return to the caller.
- The logic depends on the circular buffers: If start of data = end of data, then
- the buffer is empty. If start of data = end of data + 1, the buffer is full,
- and nothing more can be inserted into it.
- Any questions on setting the status bits?
- Well, I hope everybody's not lost! Let's continue then...
- OK, the last routine in the INT 14 procedure is Cclos. This routine will
- disable interrupts from the COM port, then from the system (this must be
- done after the COM port for the same reasons as above - if the system interrupt
- is disabled, and the COM port interrupt enabled, interrupts may not get
- processed later. We also turn off all the modem bits (i.e. Data Terminal
- Ready, Request to Send, etc.) and flush the transmit and receive buffers.
- While the last part is not necessary, it cleans up after itself. Any get data
- request processed after the close will be returned with no data set. Note
- that a put data will still be processed (if the buffer does not fill up), but
- the data will never be sent.
- Any questions about the Clos procedure?
- Guess not....
- OK, we are through with the INT14 procedure. Before we get into the INT0C
- procedure, are there any questions about what we have covered so far? ga
- (30,Zhahai) ??
- You just make it all look so simple, Jerry. GA Zhahai. ga
- (30,Zhahai) I'm not clear about the (original) purpose for resetting the...
- system interrupt in Csend? ga
- (30,Jerry S)
- Well, Zhahai, that was to make sure any pending interrupts were handled during
- developement of the program. I did not have all the routines set up at that
- time, so I had to make sure any pending interrupts were disabled. That code
- has been removed (just last week, in another revision). Basically, it was
- one bit of code which I had in there that didn't get removed when it should
- have! So much for test code! ga
- (30,John Stidd) ??
- (30,Zhahai) OK ga
- John. ga
- (30,John Stidd) Is the most up to date version of ASYNC.ASM now on DL4? ga
- (30,Jerry S)
- John, no it isn't. I will be UPLoading a slightly later version this week.
- I waited as that change was minor, and I didn't want to get too many versions
- Jerry <== I'll make a note in a bulletin when it is up. O.K. ? ga
- out there before the CO. Also, I just knew you people would catch something
- else (like the CLI)! ga
- And thanks, Mike, I will let you know when it is ready. ga
- Anything more before Jerry goes on to the next section? ga
- (30,Jerry S)
- Now that we're through with the software interface to the routines, let's take
- a look at the hardware interface.
- The INT0C procedure should not be called directly by software. It is the
- hardware's interface to the async board. When the async port requests an
- interrupt, it is processed by the system. Depending on the state of the
- interrupt mask bit, an interrupt may be taken now, or held for later
- processing. It is important that the interrupts be disabled for as short a
- time as possible (especially at high speeds), or the data coming in may not be
- handled as quickly as it gets here. Since the transmit is under our control,
- we can wait (forever, if necessary) for outgoing data, but incoming data must
- be processed as quickly as possible.
- When the interrupts are enabled, an interrupt request from the async card will
- generate an interrupt 0Ch. Our Start routine set up the interrupt to point to
- this code, where it will be handled.
- Before we go into the actual code in the INT 0C routine, are there any
- questions on how the hardware handles the interrupt? ga
- Let's continue with the software involved, then.
- The main part of the code re-enables interrupts (disabled when the interrupt
- was processed by the hardware), saves the registers and tells the system we
- are available for another interrupt from the COM port. This is done before the
- current interrupt is handled as the code can handle another interrupt while
- processing the current one in most cases. We will disable interrupts in the
- areas which cannot be interrupted.
- We then look at the Interrupt ID Register to determine what kind of interrupt
- is to be handled. If the register has the low order bit on (01h), there
- are no more interrupts to be processed. While this will not occur on the
- first call (after all, how did we get here?), this is the exit code from a
- a loop. Also, if a mistake was made and the software calls this routine (by
- executing an INT 0Ch), it will return with no action performed.
- If the Interrupt ID register contains other than 01h, an interrupt is pending.
- These interrupt ID's have the values of 00h, 02h, 04h, and 06h, which works out
- real nicely for another table. We move the value into BL, clear BH and index
- into a table from BX to call the appropriate routine to handle the type of
- interrupt.
- When thay type of interrupt is handled, we return to here and JMP back to
- check the Interrupt ID reg again. This is because one interrupt may have
- multiple functions stacked (i.e. bad parity will set receiver line status and
- received data available). It is important to handle all interrupt ID's before
- exiting the routine, or lower priority interrupts will hang.
- Also notice this is the only backward JMP in the code. These should be avoided
- if at all possible, as they can cause hard-to-find loops. We could have gotten
- around it, but I didn't for clarity sake.
- Now, any questions on the INT0C routine? ga
- (30,Zhahai) ??
- GA Zhahai. ga
- (30,Zhahai)
- How well defined is the prioritizing of the Int ID register...
- Like, what if a recieve comes in while in the loop. ga
- (30,Jerry S)
- Zhahai, the hardware is VERY well defined. If an interrupt comes in while
- processing a higher-priority interrupt, it will be held. If it comes in
- while processing a lower-priority interrupt, it will be handled immediately.
- The priority is :
- Receiver line status (highest)
- Receive data available
- Transmit holding reg empty
- Modem status (lowest).
- Most of the time, this would come into play as receive data available while
- setting up to transmit a character. In this case, we have already reset the
- transmit interrupt (we read the Interrupt ID reg), and the character is being
- set up to be sent. The receive data can come in at this time. Note also that
- at speeds below about 48k baud, we should be in and out of our receive routine
- before the next character comes in. The only delay would be a timer interrupt,
- which has been accounted for in the calculations of max speed. ga
- (30,Zhahai) Thanks ga
- (30,Jerry S) Any other questions? ga
- Good. Now the next routine is pretty short, and so will be the description.
- The lowest priority interrupt type is the modem status. Note that the
- priority of various types is determined by hardware, and cannot be changed.
- To reset a modem status interrupt, all we have to do is read the modem status
- register. We go out and get the port, then place the value found into the
- Mstatus byte so the INT14 routine has the last value in the port. This
- also minimizes the need for the INT14 routine to access the chip directly.
- Any questions? ga
- ??
- GA Mike. ga
- <grin>
- With the Modem status being the lowest...
- (30,KevinR) ??
- interrupt vector, would it be possible to get the status out of synch? ga
- (30,Jerry S)
- Theoretically, but not pratically, Mike. The modem status would come into play
- when something like carrier dropping, etc. So, for the hardware it should not -
- the interrupt would be handled before a return to whatever was running....
- As for the software, it is possible. The modem status byte reflects the
- current value, where the receive and transmit buffers may reflect up to 256
- characters earlier. So, yes it is possible. However, it is very complex to
- keep all the buffers in sync (you almost need another buffer to keep the
- modem status, for instance), which is beyond what I wanted to do here. ga
- KevinR. ga
- (30,KevinR) You justed asked it Thanks! ga.
- (30,Jerry S) Good, two at once! Any other questions? ga
- The next higher level request is the transmit holding register empty interrupt.
- (30,Zhahai) !!
- (30,Jerry S)
- This means that a byte has been transferred from the holding reg to the shift
- reg for transmission. The chip now has room for the next character. Note
- that the chip holds two bytes for transmit at one time - the one being
- transmitted, and the next one to be transmitted.
- When we receive this interrupt, we get a byte from the transmit buffer. If
- a byte is available, we place it into the transmit holding reg and return. If
- not, we disable the transmit holding register interrupt, as we have nothing
- more to send at this time.
- In either case, we return to the caller for processing of any further requests.
- Any questions? ga
- Zhahai. ga
- (30,Zhahai) Just a comment. Ints from this can be stacked 4 deep, no, ga
- (30,Jerry S)
- True, Zhahai. But I want to make one thing clear here - interrupts from the
- system are not the same as interrupt ID's from the port. If, for instance, you
- receive a character with bad parity, two levels will be set - the Receiver Line
- Status (for the parity check) and the Receive Data Ready (for the character).
- If, at this time, the transmit holding register also goes empty, and you lose
- the carrier, you will have 4 levels of interrupts on the async card, but it
- will generate only 1 int 0C to the system. All levels must be processed, or
- a lower-level interrupt will not trip the INT 0C again. ga
- (30,Zhahai) ??
- GA Zhahai. ga
- (30,Zhahai) How do we keep a critical window from happening after the last...
- 8250 Int ID was serviced and the return from int? ga
- (30,Jerry S)
- Well, Zhahai, that takes a little careful programming. For the most part,
- you could get by without the STI instruction at entry. Then the IRET will
- reset the interrupt flag. However, in this case, the code is (almost)
- entirely quasi-reentrant: that is, it can (in most places) be interrupted
- while processing. In cases like this it is important to use the stack and
- registers for saving values, instead of a location in memory which may be
- changed by another interrupt being processed before this one completes. Also,
- be thankful for the stack - try an assembler language (like IBM 370 for big
- systems) which doesn't have a stack. It makes re-entrancy very interesting! ga
- (30,Zhahai)
- Understand. But what would the scenario wherein "a lower level int...
- (30,KevinR) ??
- (30,Zhahai) would never trip the 0c int again" ? ga
- (30,Jerry S)
- That is why we need to process all pending interrupts. For instance, if we
- just processed the first one, if a character came in with bad parity the
- line status and receive data available would be set. The first one we look
- at would be the receive line status. After that is reset, the Interrupt ID
- reg will indicate the next (receive data available) is to be processed. If we
- don't handle it at this time, the receive line status, transmit holding ready
- and modem status interrupt ID's will not generate an INT 0C, since a higher
- (or equal) level is waiting to be processed. ga
- KevinR. ga
- (30,KevinR) Jerry, will the int0c rtn ever run for more than one char??? ga.
- (30,Jerry S)
- Nope, Kevin, as the async port is a character device. You will receive or
- send one character at a time, and the hardware has no way to handle a second
- (or third...) character. Remember, we are working with a straight character
- device, so everything is handled one character at a time. ga
- Any other questions? ga
- Let's look at the next routine then.
- This is the next to highest interrupt type, receive data available. We get
- the character from the port and place it in the receive buffer. If the buffer
- is full, the character is not placed in the buffer. Rather, the receiver
- overrun bit is set in the line status byte, so the next time the program
- looks at the status, it will find out data has been lost.
- Any questions? ga
- Now for the last procedure in our program.
- The Rcvrlst routine handles the highest priority interrupt type, the Receiver
- Line Status. This usually indicates an error (i.e. parity check, overrun,
- etc.) has occurred. Like the modem status, all we are going to do here is
- take the byte and place it in the line status byte, Lstatus. After this,
- we return to the caller.
- Any questions? ga
- (30,Zhahai) ??
- GA Zhahai. ga
- (30,Zhahai)
- (sorry to be so inquisitive) Won't this overwrite the rcv overflow? ga
- (30,Jerry S)
- That's true, Zhahai. That is something else I want to change in a later
- release of the code. The most common error would be to get a parity check.
- The routine is quick enough that the overrun here should not be set. The
- next version will do two things: Not overlay the overrun bit, and if the
- character comes in with bad parity (only possible for 5-7 bit transfers), the
- high-order bit will be set when we receive the character. This way, the
- program will know which character has bad parity, not just that it occurred. ga
- Any other questions? ga
- And Zhahai, don't worry - we're having the CO just to get questions asked! ga
- Let's continue then....
- Now that we're all done with the INT0C routine, are there any questions on
- the operation of this routine? ga
- Well, we're finally done!
- As mentioned in the doc, this is by no means a complete routine. There are
- many things which can be improved upon. I did not go any deeper, as it is
- fairly complex as it is, and I felt no need to make it even more so. Rather
- this routine should be considered a 'learning' program, and can be used as a
- base for other interrupt drivers for the async port.
- I hope you all enjoyed the CO as much as I did. I am soliciting ideas for
- future CO's on advanced programming in assembler language. One of the
- requests we have had is for Device Drivers. This is a good possiblilty for a
- future CO. We are also looking for other ideas, though, and all are
- appreciated.
- Also please note there are Conferences on the IBM Novice Forum (PCS-129) for
- beginning assembler language. Watch for bulletins on both SIG's for future
- CO's. Thanks again, and see you soon!
- (30,STEVE HULL) !!
- (30,Jerry S)
- P.S. Look for a bulletin on the new version later this week. I will also
- (30,David Watson ) Hear, hear for the Device Drivers CO!!
- (30,Avi S.) Mike--> can I ask u a question?
- Jerry, I would like to thank you for everyone. and hope that we get some...
- (30,Jerry S) have updated the DOC file with the changes that are made. ga
- More comments for future topics. ...
- Steve. ga with your question. ga
- Avi <== Hold just a few more minutes. ga
- (30,Avi S.) ok
- (30,STEVE HULL)
- can you comment in general on some of the more advanced SIO's ?
- Jerry? Comment on Steve's question? ga
- (30,Jerry S)
- Steve, can you give me a better idea of what you're looking for?...
- I can comment on a lot, most of it not too interesting! <grin> ga
- (30,STEVE HULL)
- I'm working with an 8530 and need some help with initializing the sucker!!
- (30,Jerry S)
- Steve, I'll byte. which is the 8530? (I don't know numbers, just functions). ga
- (30,STEVE HULL) if youi have any experience with DMA, I'd be interested. ga
- Steve <== Why an 8530? ga
- (30,STEVE HULL) The 8530 is a zilog chip capable of handleing NRZI
- (30,Zhahai) Thanks, Jerry and Mike. This has been very useful ! ga
- Jerry <== Want to open up for free-for-all (Read Between the Lines)??? ga
- (30,STEVE HULL) encoding for SNA. ga
- (30,Jerry S) Glad you liked it, Zhahai! ga
- OK, all, let's throw this wide open. The formal part of the Co is over,
- thanks a lot for you interest and *very* good questions! You also pointed
- out some of the code I messed up, and as I said, I hope to have a later
- version in the DL4 lib later this week (oh, my poor CIS bill!). Thanks
- again, and have a good eveing! ga
- (30,Zhahai) Jerry <= there is a small flaw in the documentation, point #5...
- Let me chime in that Jerry needs topics for future CO's. *HIT* hit now!!! ga
- (30,Jerry S)
- Steve, I haven't worked with SNA yet. The DMA subject can be touchy, though.
- (30,Zhahai) Jerry, under changes from ROM int14, bit 1. ga
- (30,Jerry S)
- I have done some DMA with the disk adapter, with a fair amount of success,
- but mostly end up overlaying something and hitting the 'big red switch'!
- (30,Zhahai) Jerry, Mike, I would love a DMA conf. ga
- (30,Jerry S)
- The SNA controller can do DMA, what I would suggest is getting a data sheet
- ont he chip from one of the manufacturers. ga
- Jerry, Know anyone comfortable with DMA?? ga
- (30,Jerry S)
- Zhahai --> OK, I'll look at it... I don't have a copy of the DOC handy, but
- (30,STEVE HULL) I'll second the request for a DMA co. gaa
- (30,Jerry S) I have made a note of it. ga
- (30,Zhahai) Jerry - just change 'transmit overrun' to 'recieve overrun'. ga
- (30,Jerry S)
- Mike, not really any more than I am. I'll check around and see if some of
- my friends who work with SNA know a little more. Being at a plant site with
- Jerry <== I wasn't meaning you couldn't handle it, you just sounded shy! ga
- (30,Jerry S) people working on the PC is a help! ga
- Mike, I really don't feel comfortable enough to do it, quite frankly...
- If I had my hands on the chip, I would feel a lot better! I know the theory,..
- and had some pratical experience, but not enough for a CO! ga
- (30,Zhahai) How about disk DMA COnf? ga
- (30,Jerry S)
- Zhahai, thanks a lot. Looks like my transmitter doesn't know what...
- Zhahai --> my receiver is doing! ga
- Jerry <== Anyone there interested in expanding their capabilities? ga
- (30,STEVE HULL) yes
- (30,Jerry S)
- Zhahai, I don't think we really need one on that; BIOS does it so well! ga
- Steve <== We'll work on your DMA problem and see what we can drum up! ga
- (30,Zhahai)
- Jerry - I fantasize about an asynchronous disk read/write, sets flag when...
- (30,Jerry S)
- Steve, want to expand your capabilities? You should hold a CO! Nothing like
- (30,Jerry S) holding your own to learn the subject! ga
- (30,Zhahai) Jerry <- done, rather than waiting like BIOS does. ga
- (30,David Watson ) Mike ==< Thanx
- (30,Jerry S)
- Zhahai, I agree. But most programs need to wait for the data anyway,
- (30,Rick K.) Whats new and exciting tonite? ga
- (30,Jerry S) Zhahai --. so the time savings would not be too great. ga
- (30,Zhahai) Mike <- glad you are back and presumabley better. ga
- (30,Jerry S)
- Zhahai --> Also, DOS isn't made to handle the interrupts asynchronously, ...
- Zhahai --> although I've dreamed about it, too! ga
- Rick <== Just finished Jerry's CO on ASM INT 14 ASYNCH program in DL4. ga
- (30,Zhahai)
- Jerry -> It could help a lot for a "type" style program, which otherwise...
- (30,Jerry S) Good evening, Rick! ga
- (30,Edward Huang ) DL4
- (30,Jerry S)
- Mike-->I'm surprised how well this went! Some good questions, which indicates...
- Zhahai <== Just holding on to the edges. Can hardly wait for bedtime! ga
- (30,Zhahai) Jerry -> has to "lurch" now and then while it awaits disk i/o. ga
- (30,Jerry S)
- Mike --> the people kept up, and over at an early time. Last weeks on the...
- mike --> Novice Forum lasted until almost midnight EST! ga
- Jerry, You aren't disappointedare you? <grin> ga
- (30,David Watson ) {_}iMike, I have 2 questions for you?
- (30,Avi S.) mike-> I do
- Ave <== You've been waiting all evening! You first and then David. O.K. ? ga
- I mean Avi (Sorry!) ga
- (30,Jerry S)
- Zhahai --> I agree, but then who would rewrite DOS? Otherwise we'd have
- Zhahai --> kinds of problems! ga
- Speaking of DOS... JERRY ... When is 3.1??? ga
- (30,Avi S.) Before I installed my hard disk UI removed the B floppy...
- (30,STEVE HULL)
- Thanks for taking the time to put the conference together. See you!
- (30,Jerry S) Mike --> Don't hit ^B in the CO! ga
- (30,Zhahai)
- Jerry <- sigh, too true. I was considering NOT calling DOS during such...
- (30,Avi S.) but I just left the cable hanging from the floppy controller
- Good Night, Steve. Have a *GREAT* Week!!! ga
- (30,Jerry S)
- Mike, DOS 3.1 should be ready shortly, from the announcement. I'm more
- Mike --. waiting for my copy of TOPVIEW though. ga
- (30,Zhahai)
- Jerry <- I/O, and just unravaeling the FAT myself. (fantasy, remember) ga
- (30,Avi S.)
- could this be a cause for the computer not to recognize the hard disk?
- (30,Jerry S) No problem, Steve, and thanks for coming! ga
- (30,Jerry S)
- Zhahai --> I know, I know..... I might recommend you look at the BIOS listing
- Zhahai --> the disk interrupts. You'll find the loop there, and should be
- Avi <== Did you reset the System board switches? Who's HD and driver??? ga
- (30,Jerry S) able to get the DMA you need. ga
- Mike --. If you don't mind my asking, what were you in the hospital for? ...
- (30,Zhahai)
- Jerry -> well, someday. I would almost get a copy of WINDRIVE from...
- (30,Jerry S) Mike --> nothing serious, I hope (we NEED you!) ga
- (30,Avi S.)
- Mike-> its Everex and they claim its not necessary to change any swithches
- Jerry <== Gastroenteritis that ended up with a tear in the stomach lining!!!
- (30,Avi S.) but Itried changing them but it still did not help ga
- (30,Zhahai) Jerry -> from TallTree just for the driver source (Installable). ga
- Avi <== Did you create the CONFIG.SYS file and have it on your BOOT disk? ga
- (30,Jerry S)
- Mike --. Ooo, I'll bet that hurt! I hope you feel better now, though! ga
- (30,Avi S.) what has to be in the config.sys?
- (30,Jerry S)
- Zhahai --. Just do what I do - use a virtual disk. Saves gobs of time,...
- (30,Jerry S) Zhahai --> and is completely compatable! ga
- (30,Avi S.) they didn't say anything about it. ga
- Jerry <== Everything is coming out better now!!! <grin> ga
- (30,Jerry S) Mike --> I wouldn't complain it it were! ga P.S. <grin> ga
- (30,mitch jones ) Hello
- (30,Jerry S) Hi, Mitch! ga
- (30,Zhahai)
- Jerry - that was another thought. Could pseudo-DMA, no ints or anything. ga
- (30,Avi S.) mike-> but they didnt give me a device driver
- (30,Jerry S)
- Zhahai --> If you've never used a virtual disk, you're in for a treat! I...
- Zhahai --> run 320K right now, with occasional 400K as necessary. ga
- (30,mitch jones ) Thanks, just dropped in to see what's up ga
- (30,Jerry S)
- Avi --> When you took out the 'B' drive, did you reset the switches for one...
- (30,Zhahai)
- Jerry -> see my disk timing msg, recent. Can copy 1MB from HD to NUL in 9 sec.
- Jerry <== Anytime, It's a *REAL* pleasure having you here!!! ga
- (30,Avi S.) They said it wasn't necessary but I tried and it didn't help
- Avi <== I think you'd better check with your dealer. I don't know of any...
- (30,Jerry S)
- Avi --> drive? And is your disk compatable with the IBM XT disk? ga
- (30,Zhahai)
- Jerry ->, how much would a ramdisk help? HD is usually fast enuff. ga
- Avi <== hard disk installation other than for DOS 2.0 and 2.1 and the XT ...
- (30,Jerry S) Zhahai --> About the same as copying from hard disk...
- Avi <== that does not require a device driver! GA
- (30,Jerry S)
- Zhahai --> For instance, BASICA comes up when you hit the return key, almost...
- (30,Avi S.) jerry->yes.Its Everex
- (30,Jerry S) Zhahai --> no delay at all! (If you blink, you miss it!) ga
- (30,Jerry S)
- Avi --> I don't have much experience with Everex, but if it is supposed to be...
- (30,Zhahai)
- Jerry, Yep, HD is similar. Only reason I see for RamDisk is to save...
- Zhahai <== My bernoulli drives are almost that fast too!!! ga
- (30,Jerry S)
- Avi --> completely compatable, you should be able to format it from the...
- Avi --> the FDISK program. ga
- (30,Zhahai) Jerry, wear'n'tear. Or to have a special driver ga
- (30,Zhahai) Mike -> are they back from the hospital too? ga
- Zhahai <== I just installed JRAM2 on my PC and can have up to 16 MB RAM disk...
- (30,Jerry S)
- Zhahai --> Well, I haven't played with an AT yet (dream), but the Xt...
- (30,Avi S.) Jerry-> I cant even get it to spin much less format it
- Zhahai <== If I wanted to install all 8 boards!!! ga
- (30,Jerry S) Zhahai --> is still noticeably slower. ga
- Zhahai <== The bernoulli's are on the way. I expect Monday or Tuesday!!! ga
- (30,Jerry S)
- Avi --> Hmmm Looks like you have a basic hardware problem there. I
- (30,Zhahai) Mike, would you use UNenhanced AT + Bernoullis? ga
- (30,Jerry S)
- Avi --> would suggest you check the voltages coming into the disk. ga
- Avi <== Have you addressed drives B, C, D, and on to see if DOS put it ...
- (30,David Watson ) ~r/ust
- (30,Jerry S) Mike --. Anything interesting new on the DL files? ga
- (30,Zhahai)
- Jerry, I have external Pegasus 23 M, faster than XT disk (what isn't). ga
- Avi <== some place out in left field?
- Avi <== That can happen based on switch settings. ga
- (30,Avi S.) jerry->well what I said is not quite correct...
- Jerry <== IBM UGE disk for January. I have FileExpress V. 3.0 ready but...
- (30,Avi S.)
- the green ready light comes on but I cant get the the red one to come on
- Jerry <== not up on the SIG yet (drat!!!). ga
- (30,Jerry S) Mike --. Anything new on the DL databases of interest? ga
- (30,Avi S.) mik3-> yes I tried all the way up to z!
- (30,Jerry S) Mike --> What's FileExpress? ga
- (30,Zhahai)
- Mike - I started a modified UGE disk, consisting of just the technical...
- (30,Jerry S) Avi --. Hmmm does the disk spin at all? ga
- Avi <== Sounds like a trip back to the dealer is the only cure!!! ga
- (30,mitch jones ) can I jump in with a software question ga
- Jerry <== Did you get my (drat!!!) ga
- (30,Zhahai)
- Mike- extracts, same menu program. Do you think anyone else would like...
- GA mitch!!! ga
- (30,Jerry S) Go ahead, Mitch. This is the 'free for all' ga!
- (30,Jerry S) Got it, Mike... Didn't know if you had gotten mine! ga
- (30,mitch jones ) Anybody there use Word Star/...
- (30,Avi S.) jerry->for a split second on cold start
- (30,Zhahai) Mike - such a thing? I hate to download all the chaff. ga
- (30,Avi S.) ga
- (30,mitch jones ) I have a set up problem ga
- (30,Jerry S) Mike --> Where is the UGE disk? ga
- (30,Jerry S) What's wrong, Mike? ga
- (30,Jerry S) OOOps, Make that MITCH! ga
- Zhahai <== The offer stands for anyone to send a disk in the mail
- Zhahai <== if they want! ga
- (30,mitch jones ) I can't get it to install...
- (30,mitch jones ) into my PC but it works...
- Jerry <== The UGE disks are in DL0. ga
- (30,mitch jones ) fine on the office XT ga
- (30,Jerry S)
- Avi --. Perhaps you are overloading the power supply, and one of the
- voltages is going away (although I thought the whole thing would go) ga
- Thanks, Mike. ga
- (30,Zhahai) Well, later folks... 's been fun. ga o-o
- (30,CHARLES ANDERSON ) Hello there ga
- (30,Avi S.) I guess I'll have to go back to the store
- mitch <== do you have the WINSTALL program with the WordStar? ga
- (30,Jerry S) Mitch --. What do you get for messages? ga
- (30,mitch jones ) Mike, yes...
- Good night Zhahai. Be 'seein' you later... Mike(30,Jerry S) Hi, Charles! ga
- (30,mitch jones ) but when I use it...
- Hi, Charles. Help you with anything? ga
- (30,Jerry S) 'Night, Zhahai, and thanks again for all your good questions! ga
- (30,mitch jones ) on the PC set up it wont make a Dir ga
- (30,CHARLES ANDERSON ) Hi gerry - was someone having voltage problems? ga
- Avi <== Sorry we couldn't get past the hardware problem!!! ga
- (30,Jerry S) Charles --. Don't know, almost soundsl like Avi might. ga
- (30,mitch jones ) Jerry, Error E44 ga
- (30,Jerry S)
- Avi --> I suspect something in the hardware. The disk should spin when...
- (30,CHARLES ANDERSON ) I missed eearlier - but had some which I solved ga
- (30,Jerry S) Avi --. power is applied. ga
- (30,David Watson ) {Mike, can you point me to a CO etiquette manual?? ga
- (30,Jerry S) Mitch --. Hmmm that doesn't ring a bell, and I don't have mu...
- (30,Jerry S) mitch --> doc handy... What is an E44? ga
- (30,mitch jones ) Jerry s I don't know...
- Mitch <== What do you have the default drive set to? C: ??? ga
- (30,Avi S.)
- jerry-. it does sound like it's on when I power up and as I said the green...
- ready light is on but when I try to access it the computer hangs and then...
- gives the disk not ready error. ga
- (30,CHARLES ANDERSON )
- Avi do I gather you're having some hard disk problems? ga
- (30,mitch jones ) Mike, no protocol ga
- (30,Avi S.)
- It's as if it's looking at the end of the cable of the floppy controller...
- (30,Avi S.) and not finding anything there. ga
- Mitch <== No I mean maybe the WS program is trying to access drive C: which...
- (30,Avi S.) charles-> yup
- Mitch <== may not be available on your PC? ga
- (30,CHARLES ANDERSON ) I've had a Davong for two years and been ...
- (30,mitch jones ) Mike I don't think so...
- (30,CHARLES ANDERSON ) through a lot - anything I can help on? ga
- (30,Jerry S)
- Avi --. Well, if you get a 'disk not ready', the system knows it's there...
- (30,mitch jones ) to install on the PC and that...
- (30,mitch jones ) was set to PC. ga
- Well everyone, since my Doctor doe not know I'm up doing this and I'm ...
- (30,Avi S.) jerry->I'm not sure if that was the exact error
- Supposed to be in bed for the next seven days, Guess I'd better head out...
- (30,Jerry S)
- Avi --> So your problem seems to be in the access.
- If you can't format it with Fdisk,
- you need to take it back to your dealer. ga
- Anything only the SysOp can answer or take care of??? ga
- (30,mitch jones ) Mike go to bed and rest ga
- (30,Avi S.) even just a dir just makes it hang ga
- Thanks, mitch. See you next week. ga
- (30,Jerry S) Mike, although it will be hard, I think we can make it by...
- (30,David Watson ) {Mike, best wishes, get healthy!! ga
- Jerry <grinning> Thanks to you again!!! ga
- (30,Jerry S)
- Mike --> Go to bed, get plenty of rest, and we'll see you next week! ga
- My pleasure, Mike. 'Night! ga
- Thanks David and everyone else. Good night and have a good week!!! Bye